//深度优先+回溯(反悔)

function backtrack(list,tmp,nums){
    if(tmp.length === nums.length){
        return list.push([...tmp])
    }
    for(let i=0;i<nums.length;i++){
        if(tmp.includes(nums[i])){
            continue
        }
        tmp.push(nums[i])
        backtrack(list,tmp,nums)
        tmp.pop()
    }
}


function permute(nums){
    let list = []//返回数组
    let tmp = []//存储的容器
    backtrack(list,tmp,nums)
    return list
}

nums = [1,2,3]
permute(nums)


//回溯问题
// 1.需要全部答案的路径
// let list = []
// function backtrack(list,临时路径,输入){
//     结束条件：
//         临时路径新增一个路径
//     循环{
//         选择一个数据(选择其他数据)
//         递归  backtrack(list,临时路径,输入)
//         撤回选择的数据
//     }
// }

// backtrack(list)

// 2.不需要全部答案的路径 只返回true和false  